#include "utils/StringUtils.h"
#include <QRegularExpression>

QString StringUtils::toCamelCase(const QString &input)
{
    QStringList parts = input.split('_');
    QString result;
    
    for (int i = 0; i < parts.size(); ++i) {
        if (i == 0) {
            result += parts[i].toLower();
        } else {
            result += capitalize(parts[i].toLower());
        }
    }
    
    return result;
}

QString StringUtils::toSnakeCase(const QString &input)
{
    QString result;
    for (int i = 0; i < input.length(); ++i) {
        if (input[i].isUpper() && i > 0) {
            result += '_';
        }
        result += input[i].toLower();
    }
    return result;
}

QString StringUtils::capitalize(const QString &input)
{
    if (input.isEmpty()) return input;
    return input.left(1).toUpper() + input.mid(1);
}

QStringList StringUtils::split(const QString &input, const QString &delimiter)
{
    return input.split(delimiter);
}

QString StringUtils::join(const QStringList &list, const QString &delimiter)
{
    return list.join(delimiter);
}

QString StringUtils::removeComments(const QString &code)
{
    QString result = code;
    
    // 移除单行注释
    result.remove(QRegularExpression("//.*$", QRegularExpression::MultilineOption));
    
    // 移除多行注释
    result.remove(QRegularExpression("/\\*.*?\\*/", QRegularExpression::DotMatchesEverythingOption));
    
    return result;
}

bool StringUtils::isValidIdentifier(const QString &str)
{
    if (str.isEmpty()) return false;
    
    // 首字符必须是字母或下划线
    if (!str[0].isLetter() && str[0] != '_') return false;
    
    // 其余字符必须是字母、数字或下划线
    for (int i = 1; i < str.length(); ++i) {
        if (!str[i].isLetterOrNumber() && str[i] != '_') {
            return false;
        }
    }
    
    return true;
}